package com.center.enums;

import java.util.EnumSet;

/**
 * @Author dzl
 * @Date 2021/12/30 9:55 上午
 */
public class EnumUtil {
    /**
     * 通过key找枚举
     *
     * @param enumClass 当前枚举class
     * @param key       key
     * @param <T>       /
     * @param <X>       /
     * @param <Y>       /
     * @return T
     */
    public static <T extends Enum<T>, X, Y> T getEnumByKey(Class<T> enumClass, X key) {
        if (key == null) {
            return null;
        }
        EnumSet<T> enumSet = EnumSet.allOf(enumClass);
        for (T item : enumSet) {
            if (item instanceof EnumCenter) {
                if (((EnumCenter<X, Y>) item).keyCompare(key)) {
                    return item;
                }
            }
        }
        return null;
    }

    /**
     * 通过calue找枚举
     *
     * @param enumClass class
     * @param value     /
     * @param <T>       /
     * @param <X>       /
     * @param <Y>       /
     * @return T
     */
    public static <T extends Enum<T>, X, Y> T getEnumByValue(Class<T> enumClass, Y value) {
        if (value == null) {
            return null;
        }
        EnumSet<T> enumSet = EnumSet.allOf(enumClass);
        for (T item : enumSet) {
            if (item instanceof EnumCenter) {
                if (((EnumCenter<X, Y>) item).valueCompare(value)) {
                    return item;
                }
            }
        }
        return null;
    }
}
